#include <iostream>
using namespace std;
constexpr int MAXN = 100;
int prime[MAXN]; // 第i个素数
bool is_prime[MAXN + 1]; // 是否为素数

// 求[0, n]闭区间内所有素数的数目
int seive(int n) {
    int p = 0;
    for (int i = 0; i <= n; i++) is_prime[i] = true;
    is_prime[0] = is_prime[1] = false;
    for (int i = 2; i <= n; i++) {
        if (is_prime[i]) {
            prime[p++] = i;
            for (int j = 2 * i; j <= n; j += i) is_prime[j] = false;
        }
    }
    return p;
}

typedef long long ll;
bool is_prime_small[MAXN];

void segment_seive(ll a, ll b) {
    for (int i = 0; (ll) i * i < b; i++) is_prime_small[i] = true;
    for (int i = 0; i < b - a; i++) is_prime[i] = true;

    for (int i = 2; (ll) i * i < b; i++) {
        if (is_prime_small[i]) {
            for (int j = 2 * i; (ll) j * j < b; j += i) is_prime_small[j] = false;
            for (ll j = max(2LL, (a + i - 1) / i) * i; j < b; j += i) is_prime[j - a] = false;
        }
    }
}

int main() {
    int n;
    cin >> n;
    cout << seive(n) << endl;
}